package Controllers;

import java.util.HashSet;
import java.util.Set;

public class XuLyChuoi {

    public static int getNumHopDong(String maHopDong) {
        return Integer.parseInt(maHopDong.substring(2, maHopDong.length()));
    }

    public static int getNumMaPhong(String maPhong) {
        return Integer.parseInt(maPhong.substring(2, maPhong.length()));
    }
    
    
    public static int getNumHoaDon(String maHoaDon) {
        return Integer.parseInt(maHoaDon.substring(6, maHoaDon.length()));
    }

    public static String joinMaHopDong(int maxNumMaHopDong) {
        String maHopDong = "HD0000";
        String maxMaHopDongString = maxNumMaHopDong + "";
        maHopDong = maHopDong.substring(0, maHopDong.length() - maxMaHopDongString.length()) + maxMaHopDongString;
        return maHopDong;
    }
    
    public static String joinMaHoaDon(int maxMaHoaDon) {
        String maHoaDon = "HOADON0000";
        String maxMaHoaDonString = maxMaHoaDon + "";
        maHoaDon = maHoaDon.substring(0, maHoaDon.length() - maxMaHoaDonString.length()) + maxMaHoaDonString;
        return maHoaDon;
    }

    public static String joinMaPhongTro(int maxNumPhongTro) {
        String maPhongTro = "PT0000";
        String maxNumPhongTroString = maxNumPhongTro + "";
        maPhongTro = maPhongTro.substring(0, maPhongTro.length() - maxNumPhongTroString.length()) + maxNumPhongTroString;
        return maPhongTro;
    }

    public static Set<String> xoaTrungMang(String a[]) {
        int n = a.length;
        Set<String> set = new HashSet<String>();
        for (int i = 0; i < n; i++) {
            set.add(a[i]);
        }
        return set;
    }

    public static String inHoaChuDauChuoi(String chuoi) {
        chuoi = chuoi.trim();
        if (!chuoi.isEmpty()) {
            while (chuoi.indexOf("  ") > 0) {
                chuoi = chuoi.replace("  ", " ");
            }
            chuoi = chuoi.toLowerCase();
            String[] temp = chuoi.split(" ");
            chuoi = "";
            for (String temp1 : temp) {
                chuoi = chuoi + temp1.substring(0, 1).toUpperCase() + temp1.substring(1, temp1.length()) + " ";
            }
            chuoi = chuoi.trim();
        }
        return chuoi;
    }

    public static double similarity(String s1, String s2) {
        String longer = s1, shorter = s2;
        if (s1.length() < s2.length()) { // longer should always have greater length
            longer = s2;
            shorter = s1;
        }
        int longerLength = longer.length();
        if (longerLength == 0) {
            return 1.0; /* both strings are zero length */ }
        /* // If you have StringUtils, you can use it to calculate the edit distance:
         return (longerLength - StringUtils.getLevenshteinDistance(longer, shorter)) /
         (double) longerLength; */
        return (longerLength - editDistance(longer, shorter)) / (double) longerLength;

    }

    public static int editDistance(String s1, String s2) {
        s1 = s1.toLowerCase();
        s2 = s2.toLowerCase();

        int[] costs = new int[s2.length() + 1];
        for (int i = 0; i <= s1.length(); i++) {
            int lastValue = i;
            for (int j = 0; j <= s2.length(); j++) {
                if (i == 0) {
                    costs[j] = j;
                } else {
                    if (j > 0) {
                        int newValue = costs[j - 1];
                        if (s1.charAt(i - 1) != s2.charAt(j - 1)) {
                            newValue = Math.min(Math.min(newValue, lastValue),
                                    costs[j]) + 1;
                        }
                        costs[j - 1] = lastValue;
                        lastValue = newValue;
                    }
                }
            }
            if (i > 0) {
                costs[s2.length()] = lastValue;
            }
        }
        return costs[s2.length()];
    }

    public static void printSimilarity(String s, String t) {
        System.out.println(String.format(
                "%.3f is the similarity between \"%s\" and \"%s\"", similarity(s, t), s, t));
    }
}
